package com.candy.oop;

public class Student {
//    属性
    int stuNo;
    String stuName;
    boolean stuSex;
//    除了基本类型外，还可以设置为自定义的引用类型
    Teacher teacher;
//    构造方法
//    在对象初始化时会被调用
//    如果没有定义构造方法，系统会生成一个默认的无参的构造方法；当显示声明一个构造函数，系统会将默认的无参构造收回，此时需要若需要用到无参构造函数，需要显示声明
    public Student(){
        System.out.println(this);
        System.out.println("我是构造函数，被调用了....");
    }

    public Student(String stuName){
//        this表示当前对象，可以调用当前对象的成员变量
//        此行代码表示为当前对象的stuName属性赋值为 传递进来的 参数stuName的值
        this.stuName=stuName;
        System.out.println("我是带有参数的构造函数，stuName的值是：：："+stuName);
    }
//    alt+insert可以自动生成构造函数
    public Student(int stuNo, String stuName, boolean stuSex) {
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.stuSex = stuSex;
    }

    //    方法
//    【访问控制修饰符】  返回值类型  方法名（形参列表）{方法体}
//    若返回值类型不是void，需要在方法体中存在return操作，且。return后的内容与返回值类型匹配
    public String sayBye(){
        return "再见";
    }

    /**
     * 方法的重载
     * 在类中，类名相同，而参数列表不同的设计
     * 参数不同可以包括参数的个人不同，参数的类型不同等等
     * 返回值类型可以相同也可以不同
     */
    public void sayHi(){
        System.out.println("你好！");
    }

    public void sayHi(String stuName){
        System.out.println("你好！"+stuName);
    }
    /**
     * 形参：定义在方法的参数列表中的参数，称之为形参
     * 实参：在方法调用时，传递进来的参数称之为实参
     */

    public void sayHello(int age){
        age=25;
        System.out.println("我是方法中的参数age："+age);
    }
//    对象类型也可以作为参数
    public void sayHello(Teacher teacher){
        teacher.teaName="马老师";
        System.out.println("你好，我是老师是"+teacher.teaName);
    }


}
